#include <iostream>
#include <vector>
using namespace std;

typedef long long ll;  // 定义long long类型别名

vector<ll> a(1);  // 存储糖果堆的数组，初始大小为1（索引0占位）

int main() {
	ll n, x, ans = 0;  // n堆糖果，目标最大值x，ans记录总调整量
	cin >> n >> x;
	// 读取n堆糖果数据（索引1~n有效）
	for (ll i = 1; i <= n; i++) {
		ll input;
		cin >> input;
		a.push_back(input);  // 数据存储在a[1]到a[n]
	}

	// 遍历处理相邻堆（从第2堆开始）
	for (ll i = 2; i <= n; i++) {
		if (a[i - 1] + a[i] > x) {  // 相邻两堆超过限制
			ll diff = a[i - 1] + a[i] - x;  // 计算超出量
			ans += diff;  // 累加到总调整量
			a[i] -= diff;  // 优先调整后一堆（保证前一堆已合规）
			if (a[i] < 0) a[i] = 0;  // 确保数量非负
		}
	}
	cout << ans << endl;
	return 0;
}